home *** CD-ROM | disk | FTP | other *** search
/ Motor Sport Digital Archive Collection 1960s / Motor Sport Digital Archive Collection 1960s.iso / main.swf / scripts / mx / utils / UIDUtil.as < prev    next >
Encoding:
Text File  |  2008-05-21  |  4.5 KB  |  157 lines

  1. package mx.utils
  2. {
  3.    import flash.utils.Dictionary;
  4.    import mx.core.IPropertyChangeNotifier;
  5.    import mx.core.IUIComponent;
  6.    import mx.core.IUID;
  7.    import mx.core.mx_internal;
  8.    
  9.    use namespace mx_internal;
  10.    
  11.    public class UIDUtil
  12.    {
  13.       mx_internal static const VERSION:String = "2.0.1.0";
  14.       
  15.       private static const ALPHA_CHARS:String = "0123456789ABCDEF";
  16.       
  17.       private static var uidDictionary:Dictionary = new Dictionary(true);
  18.       
  19.       public function UIDUtil()
  20.       {
  21.          super();
  22.       }
  23.       
  24.       public static function createUID() : String
  25.       {
  26.          var _loc1_:* = null;
  27.          var _loc2_:int = 0;
  28.          var _loc3_:int = 0;
  29.          var _loc4_:Number = NaN;
  30.          _loc1_ = "";
  31.          _loc2_ = 0;
  32.          while(_loc2_ < 8)
  33.          {
  34.             _loc1_ += ALPHA_CHARS.charAt(Math.round(Math.random() * 15));
  35.             _loc2_++;
  36.          }
  37.          _loc2_ = 0;
  38.          while(_loc2_ < 3)
  39.          {
  40.             _loc1_ += "-";
  41.             _loc3_ = 0;
  42.             while(_loc3_ < 4)
  43.             {
  44.                _loc1_ += ALPHA_CHARS.charAt(Math.round(Math.random() * 15));
  45.                _loc3_++;
  46.             }
  47.             _loc2_++;
  48.          }
  49.          _loc1_ += "-";
  50.          _loc4_ = Number(new Date().getTime());
  51.          _loc1_ += ("0000000" + _loc4_.toString(16).toUpperCase()).substr(-8);
  52.          _loc2_ = 0;
  53.          while(_loc2_ < 4)
  54.          {
  55.             _loc1_ += ALPHA_CHARS.charAt(Math.round(Math.random() * 15));
  56.             _loc2_++;
  57.          }
  58.          return _loc1_;
  59.       }
  60.       
  61.       public static function getUID(param1:Object) : String
  62.       {
  63.          var result:String = null;
  64.          var xitem:XML = null;
  65.          var nodeKind:String = null;
  66.          var notificationFunction:Function = null;
  67.          var item:Object = param1;
  68.          result = null;
  69.          if(item == null)
  70.          {
  71.             return result;
  72.          }
  73.          if(item is IUID)
  74.          {
  75.             result = IUID(item).uid;
  76.             if(result == null || result.length == 0)
  77.             {
  78.                result = createUID();
  79.                IUID(item).uid = result;
  80.             }
  81.          }
  82.          else if(item is IPropertyChangeNotifier && !(item is IUIComponent))
  83.          {
  84.             result = IPropertyChangeNotifier(item).uid;
  85.             if(result == null || result.length == 0)
  86.             {
  87.                result = createUID();
  88.                IPropertyChangeNotifier(item).uid = result;
  89.             }
  90.          }
  91.          else
  92.          {
  93.             if(item is String)
  94.             {
  95.                return item as String;
  96.             }
  97.             try
  98.             {
  99.                if(item is XMLList && item.length == 1)
  100.                {
  101.                   item = item[0];
  102.                }
  103.                if(item is XML)
  104.                {
  105.                   xitem = XML(item);
  106.                   nodeKind = xitem.nodeKind();
  107.                   if(nodeKind == "text" || nodeKind == "attribute")
  108.                   {
  109.                      return xitem.toString();
  110.                   }
  111.                   notificationFunction = xitem.notification();
  112.                   if(!(notificationFunction is Function))
  113.                   {
  114.                      notificationFunction = XMLNotifier.mx_internal::initializeXMLForNotification(xitem);
  115.                   }
  116.                   if(notificationFunction["uid"] == undefined)
  117.                   {
  118.                      result = notificationFunction["uid"] = createUID();
  119.                   }
  120.                   result = notificationFunction["uid"];
  121.                }
  122.                else
  123.                {
  124.                   if("mx_internal_uid" in item)
  125.                   {
  126.                      return item.mx_internal_uid;
  127.                   }
  128.                   if("uid" in item)
  129.                   {
  130.                      return item.uid;
  131.                   }
  132.                   result = uidDictionary[item];
  133.                   if(!result)
  134.                   {
  135.                      result = createUID();
  136.                      try
  137.                      {
  138.                         item.mx_internal_uid = result;
  139.                      }
  140.                      catch(e:Error)
  141.                      {
  142.                         uidDictionary[item] = result;
  143.                      }
  144.                   }
  145.                }
  146.             }
  147.             catch(e:Error)
  148.             {
  149.                result = item.toString();
  150.             }
  151.          }
  152.          return result;
  153.       }
  154.    }
  155. }
  156.  
  157.